<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context.xsd" >

    <!-- ******************* -->
    <!-- DB and Hibernate -->
    <!-- ******************* -->


    <!--
    Bean um Datenbank anzulegen, wenn noch nicht vorhanden 
    dabei wird die Methode initDB der Klasse Startup ausgeführt 
    Änderung des Rootbenutzers/ PW - da auf eigenem PC kein leeres RootPW
    -->

    <bean
        id="init"
        class="de.hdu.tennis.Startup"
        init-method="initDB" >

        <property
            name="driverClass"
            value="com.mysql.jdbc.Driver" />

        <property
            name="user"
            value="root" />

        <property
            name="password"
            value="" />

        <property
            name="defaultDBurl"
            value="jdbc:mysql://localhost:3306/mysql" />

        <property
            name="newDB"
            value="tennistest" />
    </bean>

    <!--
    diese Bean dient dazu eine Verbindung zur Datenbank herzustellen
    dabei muss man den Namen der Datenbank unter dem property "jdbcUrl" angeben
    -->

    <bean
        id="dataSource"
        class="com.mchange.v2.c3p0.ComboPooledDataSource"
        depends-on="init"
        destroy-method="close" >

        <!--
       diese Instanzierung von dataSource-Bean erst machen, wenn 
                init-Bean erfolgreich war
        -->

        <property
            name="driverClass"
            value="com.mysql.jdbc.Driver" />

        <property
            name="jdbcUrl"
            value="jdbc:mysql://localhost:3306/tennistest" />

        <property
            name="user"
            value="root" />

        <property
            name="password"
            value="" />

        <property
            name="minPoolSize"
            value="2" />

        <property
            name="maxPoolSize"
            value="4" />
    </bean>

    <!--
    diese Bean dient als Hilfestellung um auf die Datenbank zu zugreifen und
    zum Beispiel einen Kunden in eine Tabelle zu schreiben 
    diese Bean hat also ein Property namens dataSource und wird mit der darüberliegenden Bean versorgt
    d.h. man kann nicht nur Variablen als property einbinden sondern auch andere Beans also Instanzen
    -->

    <bean
        id="hibernateSessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >

        <property
            name="dataSource"
            ref="dataSource" />

        <property name="annotatedClasses" >

            <list>

                <value>
de.hdu.tennis.model.Bewertung
                </value>

                <value>
de.hdu.tennis.model.Mitglied
                </value>

                <value>
de.hdu.tennis.model.Reservierung
                </value>

                <value>
de.hdu.tennis.model.Tennisplatz
                </value>
            </list>
        </property>

        <property name="hibernateProperties" >

            <props>

                <prop key="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
                </prop>

                <prop key="hibernate.hbm2ddl.auto" >
update
                </prop>

                <prop key="hibernate.show_sql" >
false
                </prop>

                <prop key="hibernate.cache.provider_class" >
org.hibernate.cache.NoCacheProvider
                </prop>

                <prop key="hibernate.autocommit" >
false
                </prop>

                <prop key="hibernate.format_sql" >
false
                </prop>
            </props>
        </property>
    </bean>

    <!-- bei dieser Bean ist mir noch nicht bekannt, für was diese ist -->

    <bean
        id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager" >

        <property
            name="sessionFactory"
            ref="hibernateSessionFactory" />
    </bean>

    <!-- ******************* -->
    <!-- Data Access Objects -->
    <!-- ******************* -->

    <bean
        id="tennisplatzDao"
        class="de.hdu.tennis.dao.TennisplatzDao" >

        <property
            name="sessionFactory"
            ref="hibernateSessionFactory" />
    </bean>

    <bean
        id="mitgliedDao"
        class="de.hdu.tennis.dao.MitgliedDao" >

        <property
            name="sessionFactory"
            ref="hibernateSessionFactory" />
    </bean>

    <bean
        id="reservierungDao"
        class="de.hdu.tennis.dao.ReservierungDao" >

        <property
            name="sessionFactory"
            ref="hibernateSessionFactory" />
    </bean>

    <bean
        id="bewertungDao"
        class="de.hdu.tennis.dao.BewertungDao" >

        <property
            name="sessionFactory"
            ref="hibernateSessionFactory" />
    </bean>

    <!--
     		<bean id="loginController" class="de.hdu.tennis.ctrl.LoginController">
		<property name="mitgliedDao" ref="mitgliedDao" />
	</bean>
    -->


    <!-- **************************** -->
    <!-- Data Access Objects for Tests -->
    <!-- ***************************** -->

    <bean
        id="mitgliedDaoTest"
        class="de.hdu.tennis.dao.MitgliedDaoTest" >

        <property
            name="mitgliedDao"
            ref="mitgliedDao" />
    </bean>

    <bean
        id="tennisplatzDaoTest"
        class="de.hdu.tennis.dao.TennisplatzDaoTest" >

        <property
            name="tennisplatzDao"
            ref="tennisplatzDao" />
    </bean>

    <bean
        id="reservierungDaoTest"
        class="de.hdu.tennis.dao.ReservierungDaoTest" >

        <property
            name="reservierungDao"
            ref="reservierungDao" />

        <property
            name="tennisplatzDao"
            ref="tennisplatzDao" />

        <property
            name="mitgliedDao"
            ref="mitgliedDao" />
    </bean>

    <bean
        id="bewertungDaoTest"
        class="de.hdu.tennis.dao.BewertungDaoTest" >

        <property
            name="bewertungDao"
            ref="bewertungDao" />

        <property
            name="tennisplatzDao"
            ref="tennisplatzDao" />
    </bean>

</beans>